#pragma once
#include <vulkan/vulkan_core.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

class CE_VulkanShader
{
private:
    VkDevice _vkdevice;
    std::string _shaderPath;

    /**
     * @brief 顶点shader代码
     */
    std::vector<char> _vertexShaderCode;
    /**
     * @brief 片段shader代码
     */
    std::vector<char> _fragShaderCode;
    /**
     * @brief 几何shader代码
     */
    std::vector<char> _geomShaderCode;

    /**
     * @brief 顶点shader模块
     */
    VkShaderModule _vertShaderModule;
    /**
     * @brief 片段shader模块
     */
    VkShaderModule _fragShaderModule;
    /**
     * @brief 几何shader模块
     */
    VkShaderModule _geomShaderModule;


public:
    CE_VulkanShader(VkDevice device,std::string path);

    VkShaderModule getVertShaderModule();
    VkShaderModule getFragShaderModule();
    VkShaderModule getGeomShaderModule();
    void destroy();

    ~CE_VulkanShader();
};
